package com.filldream.fastboot.common.stockUtils;

import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 公共的工具类
 *
 * @author RickSun
 */
public class StockCommonUtil {

    /**
     * 删除Html标签
     * @param html
     * @return  结果
     */
    public static String delHtmlTag(String html) {
        if (StringUtils.isBlank(html)) {
            return html;
        }
        // 使用正则表达式匹配HTML标签
        Pattern pattern = Pattern.compile("<[^>]*>");
        Matcher matcher = pattern.matcher(html);
        // 用空字符串替换HTML标签
        return matcher.replaceAll("");
    }

    /**
     * 返回友好的数字文案
     * @param number 数值
     * @param scale 保留位数
     * @return  文案
     */
    public static String autoNumberHuman(BigDecimal number, int scale) {
        if (number == null) {
            return "";
        }
        if (number.compareTo(new BigDecimal("1000000000000")) > 0) {
            return number.divide(new BigDecimal("1000000000000"), scale + 1, RoundingMode.DOWN) + "万亿";
        }
        if (number.compareTo(new BigDecimal("100000000")) > 0) {
            return number.divide(new BigDecimal("100000000"), scale, RoundingMode.DOWN) + "亿";
        }
        if (number.compareTo(new BigDecimal("10000")) > 0) {
            return number.divide(new BigDecimal("10000"), scale, RoundingMode.DOWN) + "万";
        } else {
            return number.toString();
        }
    }

    /**
     * 返回友好的数字文案
     * @param number    数值
     * @param scale     保留位数
     * @param unit      单位
     * @return      返回结果
     */
    public static String autoNumberHuman(BigDecimal number, int scale,String unit) {
        if (number == null) {
            return "";
        }
        return autoNumberHuman(number, scale) + unit;
    }

    /**
     * 根据收盘价和现价获取涨跌幅
     * @param closePrice    收盘价
     * @param currentPrice  当前价格
     * @return  涨跌幅
     */
    public static BigDecimal getZdf(BigDecimal closePrice,BigDecimal currentPrice) {
        if( closePrice == null ||  currentPrice == null){
            return BigDecimal.ZERO;
        }
        // 计算涨跌金额
        BigDecimal changeAmount = currentPrice.subtract(closePrice);
        // 计算涨跌幅百分比（保留现价的小数位数，四舍五入）
        BigDecimal multiply = changeAmount.divide(closePrice, 10, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        return multiply.setScale(2, RoundingMode.HALF_UP);
    }

}
